home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Assassins - Ultimate CD Games Collection 1
/
Assassins - Ultimate CD Games Collection (1994)(Weird Science)(Track 1 of 2)[!][Amiga-CD32-CDTV][CDD5332].iso
/
arcade
/
paranoid
/
sourcecode
/
master.c
< prev
next >
Wrap
C/C++ Source or Header
|
2004-11-28
|
9KB
|
294 lines
#include <intuition/intuition.h>
#include <graphics/gfxbase.h>
#include <graphics/view.h>
#include <exec/memory.h>
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
char *OpenLibrary();
short menubreite;
APTR AllocMem();
struct GFill
{
SHORT LeftEdge,TopEdge;
UBYTE FrontPen,BackPen,DrawMode;
BYTE Count;
SHORT *XY;
struct Border *NextBorder;
SHORT data[10];
UBYTE FPen,BPen,DMode;
SHORT LEdge,TEdge;
struct TextAttr *ITextFont;
UBYTE *IText;
struct IntuiText *NextText;
};
OpenMaster ()
{
if (!(IntuitionBase=(struct IntuitionBase *)
OpenLibrary ("intuition.library",0l)))
return (FALSE);
if (!(GfxBase=(struct GfxBase *)
OpenLibrary ("graphics.library",0l)))
{ CloseLibrary (IntuitionBase); return (FALSE); }
menubreite=20;
return (TRUE);
}
CloseMaster (scr,win)
struct Screen *scr;
struct Window *win;
{
if (win) CloseWindow (win);
if (scr) CloseScreen (scr);
if (GfxBase) CloseLibrary (GfxBase);
if (IntuitionBase) CloseLibrary (IntuitionBase);
exit(TRUE);
}
struct Screen *MasterScreen (xweite,yweite,farbzahl,title)
short xweite,yweite,farbzahl; UBYTE title[];
{
struct NewScreen nws;
struct Screen *scr,*OpenScreen();
short modus=0,tiefe=1;
if (farbzahl>2) tiefe=2; if (farbzahl>4) tiefe=3;
if (farbzahl>8) tiefe=4; if (farbzahl>16) tiefe=5;
if (farbzahl>32) { tiefe=6; modus=EXTRA_HALFBRITE; }
if (farbzahl>64) { tiefe=6; modus=HAM; }
if ((xweite>330)&&(tiefe>4)) return (FALSE);
if (xweite>330) modus|=HIRES;
if (yweite>256) modus|=LACE; /* oder INTERLACE !!!!!*/
if ((title[0]==0)||(title==0)) nws.BlockPen=0; else nws.BlockPen=1;
nws.LeftEdge=0; nws.TopEdge=0;
nws.Width=xweite; nws.Height=yweite;
nws.Depth=tiefe; nws.DetailPen= 0;
nws.ViewModes=modus | SPRITES;
nws.Type=CUSTOMSCREEN;
nws.Font=NULL; nws.DefaultTitle=title;
nws.Gadgets=NULL; nws.CustomBitMap=NULL;
if (!(scr=OpenScreen(&nws))) return (FALSE);
if ((title[0]==0)||(title==0)) SetRast (&(scr->RastPort),0l);
return(scr);
}
struct Window *MasterWindow (scr,x,y,xlaenge,ylaenge,idcmp,flags,title)
struct Screen *scr;
short x,y,xlaenge,ylaenge;
long idcmp,flags;
UBYTE title[];
{
struct NewWindow nww;
struct Window *win,*OpenWindow();
nww.LeftEdge=x; nww.TopEdge=y;
nww.Width=xlaenge; nww.Height=ylaenge;
nww.DetailPen=0; nww.BlockPen=1;
nww.IDCMPFlags=idcmp | MOUSEBUTTONS | CLOSEWINDOW | MENUPICK;
if (flags&WINDOWSIZING) nww.IDCMPFlags|=NEWSIZE;
nww.Flags=flags | REPORTMOUSE;
nww.FirstGadget=NULL; nww.CheckMark=NULL;
nww.Title=title; nww.Screen=scr;
nww.BitMap=NULL; nww.MinWidth=xlaenge/10;
nww.MinHeight=ylaenge/10; nww.MaxWidth=scr->Width;
nww.MaxHeight=scr->Height;
if ((scr->Flags)&CUSTOMSCREEN) nww.Type=CUSTOMSCREEN;
else nww.Type=WBENCHSCREEN;
if (!(win=OpenWindow(&nww))) return (FALSE);
return(win);
}
MasterRequest(win,htext,ltext,rtext)
struct Window *win;
UBYTE htext[],ltext[],rtext[];
{
struct IntuiText ht,lt,rt;
ht.FrontPen=0; ht.BackPen=1; ht.DrawMode=JAM1;
ht.LeftEdge=10; ht.TopEdge=10; ht.ITextFont=NULL;
ht.IText=htext; ht.NextText=NULL;
lt.FrontPen=0; lt.BackPen=1; lt.DrawMode=JAM1;
lt.LeftEdge=5; lt.TopEdge=3; lt.ITextFont=NULL;
lt.IText=ltext; lt.NextText=NULL;
rt.FrontPen=0; rt.BackPen=1; rt.DrawMode=JAM1;
rt.LeftEdge=5; rt.TopEdge=3; rt.ITextFont=NULL;
rt.IText=rtext; rt.NextText=NULL;
return (AutoRequest(win,&ht,<,&rt,0l,0l,(long)(10*strlen(htext)),70l));
}
AddMenu (win,title)
struct Window *win;
BYTE title[];
{
struct Menu *menu,**wo;
if (menubreite+10*strlen(title)+20>(win->WScreen->Width)) return(FALSE);
if (!(menu=(struct Menu *) AllocMem((long)(sizeof(struct Menu)),
MEMF_CLEAR | MEMF_CHIP | MEMF_PUBLIC ))) return(FALSE);
Forbid();
menu->LeftEdge=menubreite; menu->Width=10*strlen(title);
menu->Height=10; menu->Flags=1;
menu->MenuName=title;
menubreite+=10*strlen(title)+20;
wo=&(win->MenuStrip);
while (*wo!=NULL) wo= &((*wo)->NextMenu);
*wo=menu;
SetMenuStrip (win,win->MenuStrip);
Permit();
return(TRUE);
}
AddItem (win,menunummer,title,commseq)
struct Window *win;
short menunummer;
char title[],commseq;
{
struct Menu *menu;
struct MenuItem *mitem,**wo;
struct IntuiText *itext;
short count=0;
menu=win->MenuStrip;
while (menunummer--) { if (menu==NULL) return(FALSE); menu=menu->NextMenu; }
if (menu==NULL) return(FALSE);
if (!(mitem=(struct MenuItem *) AllocMem((long)(sizeof(struct MenuItem)),
MEMF_CLEAR | MEMF_CHIP | MEMF_PUBLIC ))) return(FALSE);
if (!(itext=(struct IntuiText *) AllocMem((long)(sizeof(struct IntuiText)),
MEMF_CLEAR | MEMF_CHIP | MEMF_PUBLIC ))) return(FALSE);
Forbid();
wo=&(menu->FirstItem);
if (!(*wo)) menu->FirstItem=mitem;
else
{
count=1;
while ((*wo)->NextItem) { count++; wo=&((*wo)->NextItem); }
(*wo)->NextItem=mitem;
}
itext->BackPen=1; itext->LeftEdge=5; itext->TopEdge=3;
itext->IText=(UBYTE *) title;
mitem->LeftEdge=5; mitem->TopEdge=count*13;
mitem->Width=10*strlen(title)+30; mitem->Height=12;
mitem->Flags=ITEMTEXT | ITEMENABLED | HIGHBOX;
if (commseq) mitem->Flags|=COMMSEQ;
mitem->ItemFill=(APTR) itext; mitem->Command=(BYTE) commseq;
SetMenuStrip (win,win->MenuStrip);
Permit();
return(TRUE);
}
AddSubItem (win,menunummer,itemnummer,title,commseq)
struct Window *win;
short menunummer,itemnummer;
char title[],commseq;
{
struct Menu *menu;
struct MenuItem *mitem,*item,**wo;
struct IntuiText *itext;
short count=0;
menu=win->MenuStrip;
while (menunummer--) { if (menu==NULL) return(FALSE); menu=menu->NextMenu; }
if (menu==NULL) return(FALSE);
mitem=menu->FirstItem;
while (itemnummer--) { if(mitem==NULL) return(FALSE); mitem=mitem->NextItem;}
if (mitem==NULL) return(FALSE);
if (!(item=(struct MenuItem *) AllocMem((long)(sizeof(struct MenuItem)),
MEMF_CLEAR | MEMF_CHIP | MEMF_PUBLIC ))) return(FALSE);
if (!(itext=(struct IntuiText *) AllocMem((long)(sizeof(struct IntuiText)),
MEMF_CLEAR | MEMF_CHIP | MEMF_PUBLIC ))) return(FALSE);
Forbid();
mitem->Flags&=(~(HIGHBOX|COMMSEQ));
wo=&(mitem->SubItem);
if (!(*wo)) mitem->SubItem=item;
else
{
count=1;
while ((*wo)->NextItem) { count++; wo=&((*wo)->NextItem); }
(*wo)->NextItem=item;
}
itext->BackPen=1; itext->LeftEdge=5; itext->TopEdge=3;
itext->IText=(UBYTE *) title;
item->LeftEdge=5+mitem->Width; item->TopEdge=count*13;
item->Width=10*strlen(title)+30; item->Height=12;
item->Flags=ITEMTEXT | ITEMENABLED | HIGHBOX;
if (commseq) item->Flags|=COMMSEQ;
item->ItemFill=(APTR) itext; item->Command=(BYTE) commseq;
SetMenuStrip (win,win->MenuStrip);
Permit();
return(TRUE);
}
ControlMenu (win,mn,in,sn,cflag,eflag)
struct Window *win;
short mn,in,sn,cflag,eflag;
{
struct Menu *menu;
struct MenuItem *item;
menu=win->MenuStrip;
while (mn--) { if (menu==NULL) return(FALSE); menu=menu->NextMenu; }
if (menu==NULL) return(FALSE);
if (in!=-1)
{
item=menu->FirstItem;
while (in--) { if(item==NULL) return(FALSE); item=item->NextItem;}
if (item==NULL) return(FALSE);
if (sn!=-1)
{
item=item->SubItem;
while (sn--) { if(item==NULL) return(FALSE); item=item->NextItem;}
if (item==NULL) return(FALSE);
}
if (eflag) item->Flags|=ITEMENABLED;
else item->Flags&=(~ITEMENABLED);
if (cflag) item->Flags|=(CHECKED|CHECKIT);
else item->Flags&=(~(CHECKED|CHECKIT));
}
else menu->Flags=eflag;
return (TRUE);
}
CloseMenu (win)
struct Window *win;
{
struct MenuItem *item,*item1,*sitem,*sitem1;
struct Menu *menu,*menu1;
menu=win->MenuStrip;
ClearMenuStrip(win);
while (menu)
{
item=menu->FirstItem;
while(item)
{
sitem=(item->SubItem);
while (sitem)
{
sitem1=sitem;
sitem=sitem->NextItem;
FreeMem (sitem1,34l);
FreeMem ((sitem1->ItemFill),20l);
}
item1=item;
item=item->NextItem;
FreeMem (item1,34l);
FreeMem ((item1->ItemFill),20l);
}
menu1=menu;
menu=menu->NextMenu;
FreeMem (menu1,30l);
}
}
MasterSound (start,laenge,rate)
ULONG *start;
UWORD laenge,rate;
{
USHORT *ctlw,*c0tl,*c0per,*c0vol;
ULONG *c0thi;
c0thi = (ULONG *) 0xdff0a0;
c0tl = (USHORT *) 0xdff0a4;
c0per = (USHORT *) 0xdff0a6;
c0vol = (USHORT *) 0xdff0a8;
ctlw = (USHORT *) 0xdff096;
*ctlw =1;
if (!(laenge)) return();
*c0thi = (long) start;
*c0tl = laenge/2;
*c0per = rate;
*c0vol = 63;
*ctlw = 0x8201;
}